<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Kafka 高效文件存储设计</title>
    <link href="https://cdn.staticfile.org/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
    <link href="https://cdn.staticfile.org/tailwindcss/2.2.19/tailwind.min.css" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/mermaid@latest/dist/mermaid.min.js"></script>
    <style>
        body {
            font-family: 'Noto Sans SC', Tahoma, Arial, Roboto, "Droid Sans", "Helvetica Neue", "Droid Sans Fallback", "Heiti SC", "Hiragino Sans GB", Simsun, sans-serif;
            background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
            min-height: 100vh;
        }
        
        .hero-gradient {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        }
        
        .card-hover {
            transition: all 0.3s ease;
            border: 2px solid transparent;
        }
        
        .card-hover:hover {
            transform: translateY(-5px);
            box-shadow: 0 20px 40px rgba(0,0,0,0.1);
            border-color: #667eea;
        }
        
        .feature-icon {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
        }
        
        .section-title {
            position: relative;
            padding-bottom: 1rem;
        }
        
        .section-title::after {
            content: '';
            position: absolute;
            bottom: 0;
            left: 0;
            width: 60px;
            height: 4px;
            background: linear-gradient(90deg, #667eea 0%, #764ba2 100%);
            border-radius: 2px;
        }
        
        .mermaid {
            display: flex;
            justify-content: center;
            margin: 2rem 0;
        }
        
        .scroll-reveal {
            opacity: 0;
            transform: translateY(30px);
            transition: all 0.6s ease;
        }
        
        .scroll-reveal.active {
            opacity: 1;
            transform: translateY(0);
        }
        
        .number-badge {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            width: 40px;
            height: 40px;
            display: flex;
            align-items: center;
            justify-content: center;
            border-radius: 50%;
            color: white;
            font-weight: bold;
            flex-shrink: 0;
        }
        
        @keyframes float {
            0% { transform: translateY(0px); }
            50% { transform: translateY(-10px); }
            100% { transform: translateY(0px); }
        }
        
        .float-animation {
            animation: float 3s ease-in-out infinite;
        }
    </style>
</head>
<body>
    <!-- Hero Section -->
    <section class="hero-gradient text-white py-20 px-6">
        <div class="max-w-6xl mx-auto text-center">
            <h1 class="text-5xl md:text-6xl font-bold mb-6 tracking-tight">
                <i class="fas fa-database mr-4 float-animation"></i>
                Kafka 高效文件存储设计
            </h1>
            <p class="text-xl md:text-2xl opacity-90 max-w-3xl mx-auto leading-relaxed">
                探索 Apache Kafka 如何通过巧妙的设计实现卓越的性能和可扩展性，深入了解其核心存储机制
            </p>
        </div>
    </section>

    <!-- Introduction -->
    <section class="py-16 px-6 bg-white">
        <div class="max-w-4xl mx-auto">
            <p class="text-lg leading-relaxed text-gray-700 indent-8">
                Kafka 的高效文件存储设计是其性能和可扩展性的核心。Kafka 通过一系列巧妙的设计来优化磁盘 I/O 性能、数据存储和读取速度。
            </p>
        </div>
    </section>

    <!-- Architecture Diagram -->
    <section class="py-12 px-6 bg-gray-50">
        <div class="max-w-6xl mx-auto">
            <h2 class="text-3xl font-bold text-center mb-12 section-title">Kafka 存储架构概览</h2>
            <div class="mermaid">
                graph TB
                    A[Kafka Broker] --> B[分区 Partition]
                    B --> C[日志段 Log Segments]
                    C --> D[活跃段 Active Segment]
                    C --> E[历史段 Historical Segments]
                    D --> F[顺序写入]
                    E --> G[索引文件]
                    E --> H[数据压缩]
                    B --> I[副本机制]
                    I --> J[Leader 副本]
                    I --> K[Follower 副本]
                    
                    style A fill:#667eea,stroke:#fff,stroke-width:2px,color:#fff
                    style B fill:#764ba2,stroke:#fff,stroke-width:2px,color:#fff
                    style F fill:#f093fb,stroke:#fff,stroke-width:2px,color:#fff
                    style I fill:#4facfe,stroke:#fff,stroke-width:2px,color:#fff
            </div>
        </div>
    </section>

    <!-- Main Content -->
    <section class="py-16 px-6">
        <div class="max-w-6xl mx-auto">
            <h2 class="text-4xl font-bold text-center mb-16 text-gray-800">
                <i class="fas fa-cogs mr-3 feature-icon"></i>
                十大核心设计特性
            </h2>
            
            <div class="grid md:grid-cols-2 gap-8">
                <!-- Feature 1 -->
                <div class="card-hover bg-white rounded-xl p-8 shadow-lg scroll-reveal">
                    <div class="flex items-start mb-4">
                        <div class="number-badge mr-4">1</div>
                        <h3 class="text-2xl font-bold text-gray-800">顺序写入</h3>
                    </div>
                    <div class="ml-14">
                        <p class="text-gray-600 mb-3">
                            <strong class="text-purple-600">特点：</strong>Kafka 使用顺序写入的方式将消息追加到日志文件中，而不是随机写入。
                        </p>
                        <p class="text-gray-600">
                            <strong class="text-purple-600">实现：</strong>顺序写入充分利用了现代磁盘的顺序 I/O 性能，这样可以显著减少磁盘寻址和磁头移动的开销。写入操作在磁盘上是高效的，尤其是在使用 SSD 的情况下，顺序写入几乎没有延迟。
                        </p>
                    </div>
                </div>

                <!-- Feature 2 -->
                <div class="card-hover bg-white rounded-xl p-8 shadow-lg scroll-reveal">
                    <div class="flex items-start mb-4">
                        <div class="number-badge mr-4">2</div>
                        <h3 class="text-2xl font-bold text-gray-800">日志分段</h3>
                    </div>
                    <div class="ml-14">
                        <p class="text-gray-600 mb-3">
                            <strong class="text-purple-600">特点：</strong>Kafka 将每个分区的数据分成多个日志段（Log Segments），每个日志段都是一个独立的文件。
                        </p>
                        <p class="text-gray-600">
                            <strong class="text-purple-600">实现：</strong>日志段可以按时间或大小划分。新的消息写入到当前活动的日志段中，而旧的段在被删除或归档之前保持不变。这种分段机制简化了文件的管理，并且提升了写入和读取性能。
                        </p>
                    </div>
                </div>

                <!-- Feature 3 -->
                <div class="card-hover bg-white rounded-xl p-8 shadow-lg scroll-reveal">
                    <div class="flex items-start mb-4">
                        <div class="number-badge mr-4">3</div>
                        <h3 class="text-2xl font-bold text-gray-800">高效的日志压缩</h3>
                    </div>
                    <div class="ml-14">
                        <p class="text-gray-600 mb-3">
                            <strong class="text-purple-600">特点：</strong>Kafka 支持日志压缩，以减少存储空间的需求。
                        </p>
                        <p class="text-gray-600">
                            <strong class="text-purple-600">实现：</strong>通过配置，Kafka 可以对每个 Topic 执行压缩操作，使用压缩算法（如 LZ4、Snappy）来减少存储空间。Kafka 还支持基于 Key 的日志压缩，即在日志中保留每个 Key 的最新消息，删除旧的消息，从而优化存储。
                        </p>
                    </div>
                </div>

                <!-- Feature 4 -->
                <div class="card-hover bg-white rounded-xl p-8 shadow-lg scroll-reveal">
                    <div class="flex items-start mb-4">
                        <div class="number-badge mr-4">4</div>
                        <h3 class="text-2xl font-bold text-gray-800">批量写入</h3>
                    </div>
                    <div class="ml-14">
                        <p class="text-gray-600 mb-3">
                            <strong class="text-purple-600">特点：</strong>Kafka 支持批量写入和读取操作，提升了数据传输效率。
                        </p>
                        <p class="text-gray-600">
                            <strong class="text-purple-600">实现：</strong>生产者可以将多个消息打包成一个批量（batch）进行发送，减少网络传输和磁盘 I/O 的开销。消费者也可以以批量的方式读取数据，提高读取效率。
                        </p>
                    </div>
                </div>

                <!-- Feature 5 -->
                <div class="card-hover bg-white rounded-xl p-8 shadow-lg scroll-reveal">
                    <div class="flex items-start mb-4">
                        <div class="number-badge mr-4">5</div>
                        <h3 class="text-2xl font-bold text-gray-800">索引机制</h3>
                    </div>
                    <div class="ml-14">
                        <p class="text-gray-600 mb-3">
                            <strong class="text-purple-600">特点：</strong>Kafka 使用索引文件来快速定位日志中的消息。
                        </p>
                        <p class="text-gray-600">
                            <strong class="text-purple-600">实现：</strong>每个日志段都有一个索引文件，索引文件存储了消息在日志中的位置（offset）。消费者可以使用索引文件快速查找特定消息的物理位置，从而提高消息的读取速度。
                        </p>
                    </div>
                </div>

                <!-- Feature 6 -->
                <div class="card-hover bg-white rounded-xl p-8 shadow-lg scroll-reveal">
                    <div class="flex items-start mb-4">
                        <div class="number-badge mr-4">6</div>
                        <h3 class="text-2xl font-bold text-gray-800">高效的数据检索</h3>
                    </div>
                    <div class="ml-14">
                        <p class="text-gray-600 mb-3">
                            <strong class="text-purple-600">特点：</strong>Kafka 支持高效的数据检索和回溯。
                        </p>
                        <p class="text-gray-600">
                            <strong class="text-purple-600">实现：</strong>消息的存储和索引结构使得 Kafka 能够在日志中快速定位到特定的消息偏移量（offset）。消费者可以通过偏移量高效地进行消息检索和回溯。
                        </p>
                    </div>
                </div>

                <!-- Feature 7 -->
                <div class="card-hover bg-white rounded-xl p-8 shadow-lg scroll-reveal">
                    <div class="flex items-start mb-4">
                        <div class="number-badge mr-4">7</div>
                        <h3 class="text-2xl font-bold text-gray-800">无锁的并发读写</h3>
                    </div>
                    <div class="ml-14">
                        <p class="text-gray-600 mb-3">
                            <strong class="text-purple-600">特点：</strong>Kafka 的日志存储设计支持高并发的读写操作，减少了锁竞争。
                        </p>
                        <p class="text-gray-600">
                            <strong class="text-purple-600">实现：</strong>Kafka 的存储和索引机制避免了在高并发环境下的锁争用。写操作主要是追加到文件末尾，读取操作通过索引文件进行快速定位，这种设计减少了对锁的需求，从而提高了并发性能。
                        </p>
                    </div>
                </div>

                <!-- Feature 8 -->
                <div class="card-hover bg-white rounded-xl p-8 shadow-lg scroll-reveal">
                    <div class="flex items-start mb-4">
                        <div class="number-badge mr-4">8</div>
                        <h3 class="text